filechooserwidget: Avoid an uninitialized value
authorTimm Bäder <mail@baedert.org>
Thu, 15 Oct 2020 04:57:13 +0000 (06:57 +0200)
committerTimm Bäder <mail@baedert.org>
Thu, 22 Oct 2020 15:46:33 +0000 (17:46 +0200)
If the operation mode is OPERATION_MODE_RECENT and we end up in the
'goto file_entry' case, we don't set info.result. Then later after
calling check_save_entry, is_empty is TRUE which causes a goto out and
here we then try to use info.result, which is uninitialized.

Initialize info.result before doing all this.

Found by scan-build

gtk/gtkfilechooserwidget.c

index 171301a24bb84dbb52dfd4be4ca591b832eb6692..594a908e94a21344673a47eeeee58bf31afd4435 100644 (file)
@@ -5395,6 +5395,10 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
   if (impl->operation_mode == OPERATION_MODE_SEARCH)
     return get_selected_files_as_model (impl);
 
+  info.impl = impl;
+  info.result = g_list_store_new (G_TYPE_FILE);
+  info.file_from_entry = NULL;
+
   if (impl->operation_mode == OPERATION_MODE_RECENT)
     {
       if (impl->action == GTK_FILE_CHOOSER_ACTION_SAVE)
@@ -5403,13 +5407,12 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
           goto file_entry;
         }
       else
-        return get_selected_files_as_model (impl);
+        {
+          g_object_unref (info.result);
+          return get_selected_files_as_model (impl);
+        }
     }
 
-  info.impl = impl;
-  info.result = g_list_store_new (G_TYPE_FILE);
-  info.file_from_entry = NULL;
-
   toplevel = get_toplevel (GTK_WIDGET (impl));
   if (toplevel)
     current_focus = gtk_root_get_focus (GTK_ROOT (toplevel));